package com.lighthouse.doc.base.service;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.lighthouse.doc.base.domain.KnowledgeDocBaseInfo;
import com.lighthouse.doc.base.domain.KnowledgeDocBaseInfoVo;
import com.lighthouse.doc.base.domain.SearchInfo;

/**
 * 文档信息Service接口
 * 
 * @author ysz
 * @date 2023-03-22
 */
public interface IKnowledgeDocBaseInfoService 
{
    /**
     * 查询文档信息
     * 
     * @param docId 文档信息主键
     * @return 文档信息
     */
    public KnowledgeDocBaseInfoVo selectKnowledgeDocBaseInfoByDocId(String docId);

    /**
     * 查询文档信息列表
     * 
     * @param knowledgeDocBaseInfo 文档信息
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocBaseInfoList(KnowledgeDocBaseInfo knowledgeDocBaseInfo);

    /**
     * 检索文档信息列表
     *
     * @param searchInfo 检索信息
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfoVo> searchKnowledgeDocBaseInfoList(SearchInfo searchInfo) throws IOException;

    /**
     * 新增文档信息
     * 
     * @param knowledgeDocBaseInfo 文档信息
     * @return 结果
     */
    public KnowledgeDocBaseInfo insertKnowledgeDocBaseInfo(KnowledgeDocBaseInfo knowledgeDocBaseInfo);

    /**
     * 修改文档信息
     * 
     * @param knowledgeDocBaseInfo 文档信息
     * @return 结果
     */
    public int updateKnowledgeDocBaseInfo(KnowledgeDocBaseInfo knowledgeDocBaseInfo);

    /**
     * 批量删除文档信息
     * 
     * @param docIds 需要删除的文档信息主键集合
     * @return 结果
     */
    public int deleteKnowledgeDocBaseInfoByDocIds(String[] docIds);

    /**
     * 删除文档信息信息
     * 
     * @param docId 文档信息主键
     * @return 结果
     */
    public int deleteKnowledgeDocBaseInfoByDocId(String docId);

    /**
     * 查询最近关注文档
     * @param noticer 用户id
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocRecentAttention(Long noticer, String attentionType);

    /**
     * 查询最近浏览文档
     * @param noticer 用户id
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocRecentBrowse(Long noticer);

    /**
     * 我的发布
     * @param owner 用户id
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocByStatus(String docStatus, Long owner);

    /**
     * 热榜
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocHot();

    /**
     * 推荐
     * @return 文档信息集合
     */
    public List<KnowledgeDocBaseInfo> selectKnowledgeDocSuggest();

    boolean updateDocAvatar(Long userId);
}
